<?php 
	/** Clase vista, permite mostrar la aplicacion */
	class Vista {
		
		public static $modulo;	
		public static $formato;
		public static $vista;
		public static $datos;
		public static $nombreArchivoDestino;
		/** funcion iniciar, permita inicializar los valores de la clase vista */
		public static function iniciar($cadenaConfigurar=null,$datos=null,$nombreArchivoDestino=null){
				try{
					if ($cadenaConfigurar != null){
						$parametros= explode(':',$cadenaConfigurar);
						if (count($parametros)!=3){
							throw new Exception("La candenaConfigurar de la funcion requiere 3 parametros modulo:formato:vista ejemplo pemsun:html5:agregar");
						}
						self::$modulo=$parametros[0];
						self::$formato=$parametros[1];
						self::$vista=$parametros[2];
						if (self::existeArchivo(self::obtenerRuta())==false){
							throw new Exception("Ruta no existente verifique dicha ruta: ".self::obtenerRuta());
						}
					
						if ($datos!=null)
							self::asignarDatos($datos);
						
						if (((self::$formato=="html5" ||(self::$formato=="json")) && ($nombreArchivoDestino!=null)))
							throw new Exception("Cuando se tiene nombre de archivo destino los fomatos de la vista no puede ser ni html5 o json ya que estas vistas no poseen nombre de archivo distinto ");
						if ($nombreArchivoDestino!=null){
							self::$nombreArchivoDestino=$nombreArchivoDestino;
						}
					}
				}catch (Exception $e){
					throw $e;
				}	
			
		}
		/** Permite obtener la ruta de del archivo a mostrar... bla bla bla */
		private static function obtenerRuta(){
			if (self::$formato=="html5")
				return "modulos/".self::$modulo."/vista/".self::$formato."/".self::$vista.".html.twig";
			return "modulos/".self::$modulo."/vista/".self::$formato."/".self::$vista.".php";
		}

		private static function existeArchivo($ruta){
			return file_exists ($ruta);
		}
		
		public static function obtenerDato($posicion){
			if (isset(self::$datos[$posicion]))
				return self::$datos[$posicion];
			else 
				return null;
		}
		public static function obtenerDatos(){
			return !(isset(self::$datos))? null:self::$datos;

		}
		public static function asignarDato($posicion=null,$dato=null){
			
			try{
				if ($posicion==null){
					throw new Exception("La posición debe ser difente de null revise los parámetros de la función");	
				}
				//~ if ($dato==null){
					//~ throw new Exception("Los datos a obtener en la vista se debe pasar por parametros a la función");	
				//~ }
				if (isset(self::$datos[$posicion])){
					throw new Exception("Ya esta posicion posee información, se recomienda cambiar el nombre de la posición:".$posicion);
				}
				self::$datos[$posicion]=$dato;
			}catch (Exception $e){
					throw $e;
			}	
		}

		public static function asignarDatos($datos=null){
			try{
				if ($datos==null){
					throw new Exception("Los datos a guardar  en la vista se debe pasar por parametros a la función setDatos() o ser diferente de null");	
				}	
				if (!(is_array($datos))) {
					throw new Exception("Los datos a guardar en la vista se debe pasar por parametros a la función setDatos() debe un arreglo");
				}
				self::$datos=$datos;
			}catch (Exception $e){
					throw $e;
				}	
		}
		public static function mostrar(){
			try{
				if (self::existeArchivo(self::obtenerRuta())==false)
					throw new Exception("La ruta a mostrar no se encuenta: ".self::obtenerRuta() ." verfique que ya inicio la clase vista");
				if (self::$formato=="html5")
					self::mostrarHtml5();
				else
					require_once self::obtenerRuta();
			}catch (Exception $e){
					throw $e;
				}	
		}
		
		private static function cargarTwig(){
			require_once "recursos/twig/lib/Twig/Autoloader.php";
			Twig_Autoloader::register();
			$loader = new Twig_Loader_Filesystem(array("base/clases/vista/html5","modulos/".self::$modulo."/vista/".self::$formato));
			return new Twig_Environment($loader);
		}
		
		private static function mostrarHtml5(){
			$twig=self::cargarTwig();
			$twig->display(self::$vista.".html.twig",self::obtenerDatos());
		}

	}
?>
